package com.yedean.mall.token;

/**
 * @author yedean
 * @date 2022/8/17
 */
public interface TokenClient<T> {

    /**
     * 请求一组Token，并保存Token对应的用户信息
     *
     * @return token信息，认证不通过时返回null
     */
    TokenGroup askToken(T userInfo);


    /**
     * 根据refresh token请求一组新的Token，refresh_token无效时返回null
     *
     * @param refreshToken 刷新用token
     * @return 一组新的Token，refresh_token无效时返回null
     */
    TokenGroup refreshToken(String refreshToken);


    /**
     * 返回传入access token对应的用户信息，access_token无效时返回null
     *
     * @param accessToken access token
     * @return 用户信息，access_token无效时返回null
     */
    T exchangeUserInfo(String accessToken);


    /**
     * 根据accessToken无效化掉一组Token（access token 和 refresh token）
     *
     * @param accessToken accessToken
     */
    void disableTokenGroupByAccessToken(String accessToken);
}
